package cn.com.dcsgo.thread.pool;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import cn.com.dcsgo.thread.MyCallable;

/**
 * 创建一个单线程化的线程池，池中仅有一个的工作线程来执行任务，如果该线程由于出现异常而结束，则会创建一个新的线程。
 * 工作线程根据任务队列规定的顺序（FIFO，LIFO，Priority）来执行任务。
 * 适用于需要严格保证任务执行顺序的场景。
 */
public class SingleThreadPoolDemo {
    public static void main(String[] args) {
        ExecutorService singleService = Executors.newSingleThreadExecutor();
        Future<String> future = singleService.submit(new MyCallable());
        try {
            System.out.println(future.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}
